/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package entidad;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

/**
 *
 * @author Nico
 */
@Entity
public class Horario implements Serializable {

    public Horario(){
        List<HorarioDia> tmp = new ArrayList<HorarioDia>();
        
        for (int i = 0; i < 7; i++){
            tmp.add(new HorarioDia(i,0,0));
        }
        this.setHorario(tmp);
    }

    public Horario(ArrayList<HorarioDia> horarioTemporal) {
        this.setHorario(horarioTemporal);
    }

    public void setHorarioDia(int index,int iniJor, int finJor)
    {
        List<HorarioDia> tmp = this.getHorario();
        tmp.get(index).setInicioJor(iniJor);
        tmp.get(index).setFinJor(finJor);
        tmp.get(index).setIdDia(index);
        this.setHorario(tmp);
    }
    
    public List<HorarioDia> getHorario() {
        List<HorarioDia> horarioTMP = new ArrayList<HorarioDia>(horarioDia);
        return horarioTMP;
    }

    public void setHorario(List<HorarioDia> horario) {
        this.horarioDia = new HashSet<HorarioDia>(horario);
    }
    public int getTotalHoras(Calendar fechaInicio,Calendar fechaFin){
        Calendar cal = new GregorianCalendar(   fechaInicio.get(Calendar.YEAR),
                                                fechaInicio.get(Calendar.MONTH), 
                                                fechaInicio.get(Calendar.DATE));
        int totalHoras = 0;
        int primerDia = cal.get(Calendar.DAY_OF_WEEK)-1;

        if (primerDia == - 1){primerDia = 6;}

            for(int i = fechaInicio.get(Calendar.DATE); i < fechaFin.get(Calendar.DATE); i++){
                int index = (primerDia + i)%7;
                totalHoras = totalHoras + (getHorario().get(index).getFinJor()-
                        getHorario().get(index).getInicioJor());
            }
        
        return totalHoras;
    }

    public Long getIdHorario() {
        return idHorario;
    }

    public void setIdHorario(Long idHorario) {
        this.idHorario = idHorario;
    }

    public Horario copiar(){
	ArrayList<HorarioDia> tmp = new ArrayList<HorarioDia>();
	for (HorarioDia hd : horarioDia){
		tmp.add(new HorarioDia(hd.getIdDia(), hd.getInicioJor(), hd.getFinJor()));
	}
	return new Horario(tmp);
    }
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idHorario;
    @OneToMany (mappedBy = "horario",fetch = FetchType.EAGER)
    private Set<HorarioDia> horarioDia;
    
}
